from langchain_core.tools import tool
import json
import os
from openai import OpenAI


@tool(description="解析/生成/优化简历：输入为json或文本，输出结构化或docx路径")
def ResumeGenerateOrAnalyze(payload: str) -> str:
    """
    生成或分析简历
    """
    try:
        # 如果payload看起来像JSON，尝试解析
        if payload.strip().startswith('{'):
            try:
                resume_data = json.loads(payload)
                return f"简历分析完成，包含以下信息：姓名({resume_data.get('base_info', {}).get('name', '未提供')})，工作经历({len(resume_data.get('work_experience', []))}段)，项目经历({len(resume_data.get('project_experience', []))}个)"
            except json.JSONDecodeError:
                pass
        
        # 生成简历
        ai_client = OpenAI(
            api_key=os.getenv("DASHSCOPE_API_KEY"),
            base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
        )

        # 构建简历生成提示词
        prompt = f"""
        请生成一份Python开发工程师的简历，要求：
        1. 基本信息：姓名、性别、联系方式、邮箱、求职意向
        2. 教育经历：1-2段，包含学校名称、专业名称、入学时间、毕业时间
        3. 工作经历：1-2段，包含公司名称、职位名称、入职时间、离职时间、工作描述
        4. 项目经历：3-5个项目，包含项目名称、时间、项目描述、技术栈、业务描述、个人职责
        5. 专业技能：包含编程工具、Python基础、数据库、中间件、相关框架等
        6. 自我评价：3句话，突出自我优势和亮点
        
        用户需求：{payload}
        
        请以JSON格式返回，严格按照以下结构：
        {{
            "base_info": {{
                "name": "张三",
                "sex": "男",
                "phone": "138-0000-0000",
                "email": "zhangsan@example.com",
                "job_objective": "Python开发工程师"
            }},
            "educational": [
                {{
                    "school_name": "北京理工大学",
                    "professional_name": "计算机科学与技术",
                    "enrollment_time": "2016年9月",
                    "graduation_time": "2020年7月"
                }}
            ],
            "work_experience": [
                {{
                    "company_name": "某科技公司",
                    "job_title": "Python开发工程师",
                    "entry_time": "2020年7月",
                    "departure_time": "2023年8月",
                    "job_description": "负责后端服务开发，参与系统架构设计"
                }}
            ],
            "project_experience": [
                {{
                    "project_name": "电商系统",
                    "time": "2022年1月-2022年6月",
                    "project_description": "开发电商平台后端服务",
                    "technology_stack": "Python, Django, MySQL, Redis",
                    "business_description": "提升系统性能30%",
                    "personal_responsibility": "负责核心模块开发"
                }}
            ],
            "professional_skills": {{
                "programming_tools": "PyCharm, Git, Docker",
                "python_basic": "精通Python语法和数据结构",
                "database": "MySQL, Redis, MongoDB",
                "relevant_frameworks": "Django, FastAPI, Flask"
            }},
            "self_evaluation": "1. 3年Python开发经验，精通后端服务架构设计；2. 具备良好的工程化思维和团队协作能力；3. 善于快速定位并解决复杂技术问题。"
        }}
        """

        result = ai_client.chat.completions.create(
            model="qwen-plus",
            messages=[
                {
                    "role": "user",
                    "content": prompt
                }
            ],
            temperature=0.6,
        )

        content = result.choices[0].message.content
        
        # 尝试解析JSON
        try:
            resume_data = json.loads(content)
            return f"简历生成成功！包含以下信息：姓名({resume_data.get('base_info', {}).get('name', '未提供')})，工作经历({len(resume_data.get('work_experience', []))}段)，项目经历({len(resume_data.get('project_experience', []))}个)。完整简历内容：{content}"
        except json.JSONDecodeError:
            # 如果JSON解析失败，返回原始内容
            return f"简历生成完成，内容如下：{content}"
            
    except Exception as e:
        return f"简历处理失败：{str(e)}"


def build_resume_tools():
    return [ResumeGenerateOrAnalyze]


